package com.study.compose.coroutines

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

/**
 * 异步流：Flow
 * 挂起函数可以异步的返回单个值，但是该如何异步返回多个计算好的值呢？Flow就是为了解决这个问题的。
 */

/**
 * 使用流构建器flow创建一个事件流
 */
fun flowSimple(): Flow<Int> = flow {
    for (i in 1..10) {
        //假设在这里执行了一系列的耗时操作
        delay(1000)
        emit(i)
    }
}

fun main() = runBlocking {

    //开启一个协程运行其他任务
    launch {
        for (i in 1..10) {
            delay(1000)
            println("验证一下,主线程并未被阻塞,还可以做其他事情")
        }
    }
    //收集数据流中的结果
    flowSimple().shareIn(this, SharingStarted.WhileSubscribed(100)).collect {
        println(it)
    }
}